package com.example.lt.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.lt.pojo.dto.*;
import com.example.lt.pojo.entity.Consumer;
import com.example.lt.pojo.vo.UserDetailVO;
import com.example.lt.pojo.vo.UserLoginVO;
import com.example.lt.pojo.vo.UserVO;
import com.example.lt.result.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Author 小涛Tao
 * @Date: 2024/05/29/17:48
 * version 1.0 注释：
 **/
public interface ConsumerService extends IService<Consumer> {

    /**
     * 管理端获取所有用户信息
     * @return
     */
    Result<List<UserDetailVO>> getAllUser();

    /**
     * 管理端删除用户，永久删除的
     * @param id 用户id
     * @return
     */
    Result deleteUser(Integer id);

    /**
     * 用户账号登录
     * @param userLoginDTO
     * @return
     */
    Result<List<UserLoginVO>> userLogin(UserLoginDTO userLoginDTO);

    /**
     * 用户邮箱登录
     * @param userLoginDTO
     * @return
     */
    Result<List<UserLoginVO>> emailLogin(UserLoginDTO userLoginDTO);

    /**
     * 注册账号接口
     * @param userRegisterDTO
     * @return
     */
    Result register(UserRegisterDTO userRegisterDTO);

    /**
     * 用户修改密码接口
     * @param updatePwdDTO 内含用户id、用户名、旧密码和新密码
     * @return
     */
    Result updatePassword(UpdatePwdDTO updatePwdDTO);

    /**
     * 用户重置密码
     * @param userResetPwdDTO
     * @return
     */
    Result resetPassword(UserResetPwdDTO userResetPwdDTO);

    /**
     * 根据用户id来获取用户信息
     * @param id
     * @return
     */
    List<UserVO> getUserById(Integer id);

    /**
     * 根据用户id获取用户详细信息
     * @param id
     * @return
     */
    List<UserDetailVO> geUserDetail(Integer id);

    /**
     * 把验证码存到redis中
     * @param key
     * @param code
     */
    void redisSaveCode(String key, String code);

    /**
     * 检查此邮箱是否有被用户注册过
     * @param email
     */
    boolean checkEmail(String email);

    /**
     * 更新用户头像
     * @param avatorFile
     * @param id
     * @return
     */
    Result updateUserAvator(MultipartFile avatorFile, int id);

    /**
     * 修改用户信息
     * @param userUpdateDTO
     * @return
     */
    Result updateUserMsg(UserUpdateDTO userUpdateDTO);

    /**
     * 注销用户
     * @param id
     * @return
     */
    Result logOutUser(Integer id);

    /**
     * 生成交易订单，并返回订单编号
     * @param duration
     * @return
     */
    String recharge(String duration, Double total);
}
